package demo2;
interface IShape {//interface I + 抽象类名
//    int a = 1;
//    int b = 10;//变量/属性 默认为 public static final
    void draw();//抽象方法默认为 static abstract修饰 不能进行具体方法实现
//   static void eat() {//如果一定要进行具体方法实现 需要使用static/default 修饰
//        System.out.println(".");
//    }
//    default void eat1() {
//        System.out.println("..");
//    }
}

class Rect implements IShape {//类和接口之间使用 implements 实现
    @Override
    public void draw() {//进行重写
        System.out.println("画矩形");
    }
}

class Cycle implements IShape {
    @Override
    public void draw() {
        System.out.println("画圆");
    }
}

class Flower implements IShape {
    @Override
    public void draw() {
        System.out.println("画❀");
    }
}

class Triangle implements IShape {
    @Override
    public void draw() {
        System.out.println("画三角形");
    }
}
public class Test {

    public static void main2(String[] args) {
        //接口特性
        //1. 接口类型是一种引用类型，但是不能直接new接口的对象
        //2. 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract（只能是
        //public abstract，其他修饰符都会报错)
        //3. 接口中的方法是不能在接口中实现的，只能由实现接口的类来实现
        //4. 重写接口中方法时，不能使用默认的访问权限
        //5. 接口中可以含有变量，但是接口中的变量会被隐式的指定为 public static final 变量
        //6. 接口中不能有静态代码块和构造方法
        //7. 接口虽然不是类，但是接口编译完成后字节码文件的后缀格式也是.class
        //8. 如果类没有实现接口中的所有的抽象方法，则类必须设置为抽象类
        //9. jdk8中：接口中还可以包含default方法。
        //接口的使用
        Computer computer = new Computer();
        computer.openDevice();
        //调用鼠标
        computer.useDevice(new Mouse());
        //调用键盘
        computer.useDevice(new KeyBoard());
        computer.closeDevice();
    }
    public static void func(IShape ishape) {
        ishape.draw();
    }
    public static void main1(String[] args) {
        //接口:多个类的公共规范，是一种引用数据类型。
        //语法：public interface 接口名称
        //1. 创建接口时, 接口的命名一般以大写字母 I 开头.
        //2. 接口的命名一般使用 "形容词" 词性的单词.
        //3. 阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性.
        //IShape ishape = new IShape();//接口不能进行实例化
        IShape ishape1 = new Rect();//向上转型
        IShape ishape2 = new Cycle();
        IShape ishape3 = new Triangle();
        IShape ishape4 = new Flower();
        func(ishape1);//静态转化
        func(ishape2);
        func(ishape3);
        func(ishape4);
    }
}
